#include <head.h>

#define FDS_MAX(fd_max, fd) fd_max > fd ? fd_max : fd;

int main(int argc, char const *argv[])
{
	/******************* 打开文件 *******************/
	int fifo_fd_1 = open("fifo_1", O_RDONLY);
	if (fifo_fd_1 == -1)
	{
		ERRLOG("文件打开失败");
		return 0;
	}
	printf("文件1启动成功\n");

	int fifo_fd_2 = open("fifo_2", O_RDONLY);
	if (fifo_fd_2 == -1)
	{
		ERRLOG("文件打开失败");
		return 0;
	}
	printf("文件2启动成功\n");

	int fifo_fd_3 = open("fifo_3", O_RDONLY);
	if (fifo_fd_3 == -1)
	{
		ERRLOG("文件打开失败");
		return 0;
	}
	printf("文件3启动成功\n");

	// 建立 文件描述符数组
	int fifo_fds[3] = {fifo_fd_1, fifo_fd_2, fifo_fd_3};

	// 创建 缓冲区
	char buf[1024] = "a";

	/******************* 设定描述符集 *******************/
	fd_set fds;		// 母本
	fd_set fd_temp; // 副本
	int fd_len = 0;

	int fd_max = 0;
	// 清空 fds
	FD_ZERO(&fds);
	FD_ZERO(&fd_temp);

	// 添加文件描述符 并更新 文件描述符个数 以及 最大值
	FD_SET(fifo_fd_1, &fds);
	++fd_len;
	fd_max = FDS_MAX(fd_max, fifo_fd_1);

	FD_SET(fifo_fd_2, &fds);
	++fd_len;
	fd_max = FDS_MAX(fd_max, fifo_fd_2);

	FD_SET(fifo_fd_3, &fds);
	++fd_len;
	fd_max = FDS_MAX(fd_max, fifo_fd_3);

	printf("max = %d\nfd_len = %d\n", fd_max, fd_len);

	int byte = 0;
	while (1)
	{
		fd_temp = fds;
		select(fd_max + 1, &fd_temp, NULL, NULL, NULL);

		//
		for (size_t i = 0; i < fd_len; i++)
		{
			if (FD_ISSET(fifo_fds[i], &fd_temp))
			{
				memset(buf, 0, sizeof(buf));
				byte = read(fifo_fds[i], buf, sizeof(buf));
				if (byte > 0)
				{
					printf("fifo_%ld = %s\n", i + 1, buf);
				}
			}
		}
	}

	return 0;
}